Spring Framework এবং Jackson লাইব্রেরি একত্রে কাজ করে JSON Serialization (Java Object থেকে JSON এ রূপান্তর) এবং Deserialization (JSON থেকে Java Object এ রূপান্তর) সহজ করতে। Spring এর @RestController এবং @RequestBody অ্যানোটেশন ব্যবহার করে Jackson স্বয়ংক্রিয়ভাবে JSON ডেটা এবং Java Object এর মধ্যে ম্যাপিং পরিচালনা করে।
Spring এবং Jackson Integration এর প্রধান বৈশিষ্ট্য
@RequestBody: ইনকামিং JSON ডেটা Java Object এ রূপান্তর করে।@ResponseBody: Java Object কে JSON আউটপুটে রূপান্তর করে।- Spring Boot এ Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে।
- Custom Serialization/Deserialization সমর্থন।
প্রয়োজনীয় সেটআপ
Maven ডিপেনডেন্সি (Spring Boot এর জন্য):
Spring Boot Jackson ডিফল্টভাবে অন্তর্ভুক্ত করে। যদি আলাদাভাবে যোগ করতে হয়:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- সর্বশেষ ভার্সন -->
</dependency>
Step-by-Step উদাহরণ
১. একটি মডেল ক্লাস তৈরি করা
public class User {
private String name;
private int age;
private String email;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
২. একটি @RestController তৈরি করা
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public String createUser(@RequestBody User user) {
// JSON থেকে User object তৈরি হয়েছে
return "User created: " + user.getName() + ", Age: " + user.getAge();
}
@GetMapping
public User getUser() {
// JSON আউটপুটে User object রিটার্ন হবে
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
return user;
}
}
৩. API টেস্ট করা
POST API Call:
Request:
{ "name": "Bob", "age": 30, "email": "bob@example.com" }Response:
User created: Bob, Age: 30
GET API Call:
Response:
{ "name": "Alice", "age": 25, "email": "alice@example.com" }
Custom Serialization/Deserialization
Custom Serializer তৈরি করা
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
public class UserSerializer extends StdSerializer<User> {
public UserSerializer() {
this(null);
}
public UserSerializer(Class<User> t) {
super(t);
}
@Override
public void serialize(User user, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeStringField("fullName", user.getName());
gen.writeNumberField("userAge", user.getAge());
gen.writeEndObject();
}
}
Custom Serializer সংযুক্ত করা
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@JsonSerialize(using = UserSerializer.class)
public class User {
private String name;
private int age;
private String email;
// Getters and Setters
}
Custom Serialization Output:
- GET API Call:
{
"fullName": "Alice",
"userAge": 25
}
Custom Deserializer তৈরি করা
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
public class UserDeserializer extends JsonDeserializer<User> {
@Override
public User deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
// JSON Parsing Logic
return null; // Custom deserialization logic
}
}
Spring Boot Configuration (Custom ObjectMapper)
Spring Boot এ একটি কাস্টম ObjectMapper সংজ্ঞায়িত করে কাস্টম Serialization/Deserialization সমর্থন যোগ করা যায়।
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
// Custom configurations
return mapper;
}
}
Error Handling (Validation Integration)
Validation এবং Exception Handling:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;
@RestControllerAdvice
public class ValidationExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getFieldErrors().forEach(error -> {
errors.put(error.getField(), error.getDefaultMessage());
});
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}
}
- Spring এর
@RestControllerএবং@RequestBodyJackson এর মাধ্যমে JSON ডেটা হ্যান্ডলিংকে সহজ করে। - Custom Serializer/Deserializer ব্যবহার করে JSON ফরম্যাট সম্পূর্ণ নিয়ন্ত্রণ করা যায়।
- Spring Boot এ ডিফল্ট
ObjectMapperকাস্টমাইজ করা যায়। - Validation এবং Exception Handling REST API এর জন্য Jackson Integration আরও শক্তিশালী করে।
Content added By
Read more